# @Time : 2024/6/14 8:28
# @Author : ZHUYI
# @File : dataVisual
import pandas as pd
import matplotlib.pyplot as plt
import numpy as py


def dataVisual():
    """
    数据可视化函数，用于展示掘金小册的销售数量和价格。
    """
    # 读取并打印预处理后的数据文件内容
    with open('csv/book_preprocess.csv', 'r', encoding='utf-8') as fp:
        content = fp.read()
        print(content)

    # 设置matplotlib字体和图形参数，以适应中文显示和提高图形质量
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['figure.dpi'] = 100
    plt.rcParams['figure.figsize'] = (5, 3)

    # 从CSV文件中读取小册数据
    df = pd.read_csv("csv/book.csv", keep_default_na=False)

    # 提取小册标题、销售数量和小册价格
    x_name = df['小册标题']
    sell_num = df['销售数量']
    df['小册价格'] = df['小册价格'] / 100
    price = df['小册价格']

    # 创建第一个图形，展示小册的销售数量
    fig = plt.figure(figsize=(20, 15))
    plt.title("掘金小册销售数量")
    plt.grid(ls="--", alpha=0.5)
    plt.bar(x_name, sell_num, facecolor="green", label="销售数量")
    # 旋转x轴标签，避免标签重叠
    plt.xticks(rotation=270)
    # 设置x轴标签为小册标题
    x = py.arange(len(x_name))
    width = 0.4
    plt.xticks(x + width, labels=x_name)
    plt.legend(loc="upper right")
    # 在柱子上显示销售数量
    for a, b in zip(x_name, sell_num):
        plt.text(a, b,
                 b,
                 ha='center',
                 va='bottom',
                 )
    fig.show()

    # 创建第二个图形，展示小册的价格
    fig2 = plt.figure(figsize=(20, 15))
    plt.title("掘金小册价格")
    plt.grid(ls="--", alpha=0.5)
    plt.bar(x_name, price, label="小册价格")
    # 旋转x轴标签，避免标签重叠
    plt.xticks(rotation=270)
    plt.legend(loc="upper right")
    # 设置x轴标签为小册标题
    x = py.arange(len(x_name))
    width = 0.6
    plt.xticks(x + width, labels=x_name)
    # 在柱子上显示价格
    for a, b in zip(x_name, price):
        plt.text(a, b,
                 b,
                 ha='center',
                 va='bottom',
                 )
    fig2.show()

